package com.cdelink.xzgy.ftp.user.service;

import com.cdelink.xzgy.ftp.common.ReturnData;
import com.cdelink.xzgy.ftp.user.entity.Records;
import com.cdelink.xzgy.ftp.user.entity.dto.FileDto;
import com.cdelink.xzgy.ftp.user.entity.vo.FileVo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * (User)表服务接口
 *
 * @author sxl
 * @since 2021-12-13 17:14:25
 */
public interface FileService {

    /**
     * 获取文佳列表
     *
     * @param folder
     * @return
     */
    List<FileVo> listFiles(String folder);

    /**
     * 文件上传
     *
     * @param file
     * @param folder
     * @param insertOrCover 1覆盖 2新增文件
     * @param exist
     * @return
     */
    ReturnData uploadFile(MultipartFile file, String folder, Integer insertOrCover, boolean exist, String userId, String taskId);

    /**
     * 检查文件是否有重复
     *
     * @param folder
     * @param fileName
     * @return
     */
    boolean checkRepeat(String folder, String fileName);

    /**
     * 创建文件夹
     *
     * @param folder
     * @return
     */
    FileVo buildDirectory(String folder);

    /**
     * 删除文件夹
     *
     * @param folder
     * @return
     */
    boolean delDirectory(String folder);

    /**
     * 文件下载
     *
     * @param fileName
     * @param response
     */
    void download(String fileName, HttpServletResponse response);

    /**
     * 删除指定文件
     *
     * @param url
     * @return
     */
    boolean delFile(String url);

    /**
     * 重名名文件夹
     *
     * @param folder
     * @param newFolder
     * @return
     */
    boolean renameFolder(String folder, String newFolder);

    /**
     * 获取文件历史记录
     *
     * @param fileName 文件名
     * @return 记录列表
     */
    List<Records> getFileHistory(String fileName);

    /**
     * 获取所有文件列表
     *
     * @param folder
     * @return
     */
    FileDto getFileList(String folder);

    /**
     * 停止上传进程
     *
     * @param code 任务id
     * @return
     */
    boolean stopProcess(String code);

    /**
     * 通过用户id生成一个时间戳：userId的taskId
     *
     * @param userId 用户id
     * @return taskID
     */
    String getTaskId(String userId);

    /** 在线预览
     * @param url 文件地址  网络地址：http://xxxx    ftp地址： /pdf.pdf
     * @param response 响应流
     */
    void onlinePreview(String url, HttpServletResponse response) throws Exception;


    /**
     * 通过文件名搜索文件/文件夹
      * @param fileName 文件名
     * @param currentFolder 当前文件夹
     * @return 文件/文件夹列表
     */
    List<FileVo> searchByFileName(String fileName, String currentFolder);

    /**
     * 移动文件/文件夹到指定目录
     * @param fileOrDir 文件/文件夹
     * @param targetFolder 目标文件夹
     * @return b
     */
    boolean moveFileOrDir(String fileOrDir, String targetFolder);

    /**
     * 下载zip压缩包文件
     * @param dir 目录
     * @param response 响应流
     */
    void downloadZip(String dir, HttpServletResponse response);

    /**
     * 获取文件夹zip流
     * @param dir 指定目录
     * @param response zip压缩文件流
     */
    void downloadDirectory(String dir,HttpServletResponse response);

    /**
     * web端服务
     * @param dir 指定文件夹
     * @param targetDir 目标目录
     */
    ReturnData createLocalDir(String dir,String targetDir);
}

